# Makefile de ejemplo para C++
#
# Creado: jue abr 15 15:34:19 ART 2004
#
# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/]
#



# CONFIGURACION
################

# Nombre del ejecutable.
target = cliente

# ExtensiÃƒÆ’Ã‚Â³n de los archivos a compilar (c para C, cpp o cc o cxx para C++).
extension = cpp

# Archivos con el cÃƒÆ’Ã‚Â³digo fuente que componen el ejecutable. Si no se especifica,
# toma todos los archivos con la extensiÃƒÆ’Ã‚Â³n mencionada. Para especificar hay que
# descomentar la lÃƒÆ’Ã‚Â­nea (quitarle el '#' del principio).
# NOTA: No poner cabeceras (.h).
#fuentes = entrada.cpp

# Si usa funciones de math.h, descomentÃƒÆ’Ã‚Â¡ (quitale el '#' a) la siguiente lÃƒÆ’Ã‚Â­nea.
math = si

# Si usa pthreads, descomentÃƒÆ’Ã‚Â¡ (quitale el '#' a) la siguiente lÃƒÆ’Ã‚Â­nea.
pthreads = si

# Si usa gthreads, descomentÃƒÆ’Ã‚Â¡ (quitale el '#' a) la siguiente lÃƒÆ’Ã‚Â­nea.
#gthreads = si

# Si es un programa GTK+, descomentÃƒÆ’Ã‚Â¡ (quitale el '#' a) la siguiente lÃƒÆ’Ã‚Â­nea.
# gtk = si

# Si es un programa gtkmm, descomentÃƒÆ’Ã‚Â¡ (quitale el '#' a) la siguiente lÃƒÆ’Ã‚Â­nea.
gtkmm = si

# Si es un programa gtkmm, descomentÃƒÆ’Ã‚Â¡ (quitale el '#' a) la siguiente lÃƒÆ’Ã‚Â­nea.
cryptopp = si

# Descomentar si se quiere ver como se invoca al compilador
#verbose = si


# CONFIGURACION "AVANZADA"
###########################

# Opciones para el compilador C/C++ en modo ansi.
CFLAGS = -Wall -pedantic -pedantic-errors

# Para que explote lo mas posible
CFLAGS += -O0 -DNDEBUG

# Para valgrind o debug
CFLAGS += -ggdb -DDEBUG -fno-inline

# Opciones del enlazador.
#LDFLAGS =

# Estandar de C a usar
CSTD = c99

# Estandar de C++ a usar
CXXSTD = c++0x

# Si se quiere compilar estaticamente, descomentar la siguiente linea
#static = si


# VARIABLES CALCULADAS A PARTIR DE LA CONFIGURACION
####################################################


# Agrego flags y libs de GTK+ de ser necesario.
ifdef gtk
#CFLAGS += $(shell pkg-config --cflags gtk+-3.0)
#LDFLAGS += $(shell pkg-config --libs gtk+-3.0)
endif

# Agrego flags y libs de GTK+ de ser necesario.
ifdef gtkmm
# incluye cosas de 2.4 tambien
CFLAGS += $(shell pkg-config --cflags gtkmm-3.0)
endif

# Agrego flags y libs de gthreads de ser necesario.
ifdef gthreads
CFLAGS += $(shell pkg-config --cflags gthread-2.0)
LDFLAGS += $(shell pkg-config --libs gthread-2.0)
endif

# Linkeo con libm de ser necesario.
ifdef math
LDFLAGS += -lm
endif

# Linkeo con pthreads de ser necesario.
ifdef pthreads
LDFLAGS += -lpthread -pthread 
endif

ifdef static
LDFLAGS += -static
endif


# Librerias adicionales para el cliente
LDFLAGS += -L /usr/lib -L /usr/lib/jsoncpp -ljsoncpp 
LDFLAGS += -lcryptopp
LDFLAGS += -lX11

# Pongo flags de C para C++ tambien
CXXFLAGS += $(CFLAGS)

# Uso enlazador de c++ si es codigo no C.
ifeq ($(extension), c)
CFLAGS += -std=$(CSTD)
LD = $(CC)
else
CXXFLAGS += -std=$(CXXSTD)
LD = $(CXX)
endif

# Si no especifica archivos, tomo todos.
fuentes ?= $(wildcard *.$(extension))

occ := $(CC)
ocxx := $(CXX)
orm := $(RM)
old := $(LD)
ifdef verbose
RM := $(RM) -v
else
CC =  @echo "  CC  $@"; $(occ)
CXX = @echo "  CXX $@"; $(ocxx)
RM =  @echo "  CLEAN"; $(orm)
LD =  @echo "  LD  $@"; $(old)
endif

# RUTAS
common_path=../common
comunicacion=$(common_path)/comunicacion
comunicacion_cliente=./comunicacion
protocolo=$(comunicacion)/protocolo
general=$(common_path)/general
controlador=controlador
interfaces=interfaces
modelo=modelo
thread=thread
vista=vista
animaciones=$(vista)/animaciones
media=$(vista)/media
paneles=$(vista)/paneles
parser=$(vista)/parser
vistas=$(vista)/vistas

# FUENTES
fuentes ?= $(wildcard *.$(extension))
fuentes += $(wildcard $(general)/*.$(extension))
fuentes += $(wildcard $(common_path)/*.$(extension))
fuentes += $(wildcard $(protocolo)/*.$(extension))
fuentes += $(wildcard $(comunicacion_cliente)/*.$(extension))
fuentes += $(wildcard $(comunicacion)/*.$(extension))
fuentes += $(wildcard $(thread)/*.$(extension))
fuentes += $(wildcard $(interfaces)/*.$(extension))
fuentes += $(wildcard $(vista)/*.$(extension))
fuentes += $(wildcard $(animaciones)/*.$(extension))
fuentes += $(wildcard $(media)/*.$(extension))
fuentes += $(wildcard $(paneles)/*.$(extension))
fuentes += $(wildcard $(parser)/*.$(extension))
fuentes += $(wildcard $(vistas)/*.$(extension))
fuentes += $(wildcard $(controlador)/*.$(extension))
fuentes += $(wildcard $(modelo)/*.$(extension))
# OBJETOS
o_files=$(patsubst %.$(extension),%.o,$(fuentes))

# INCLUDES 
INCLUDES=-I. -I$(general) -I$(common_path) -I$(protocolo) -I$(comunicacion) -I$(comunicacion_cliente) -I$(thread) -I$(interfaces)   \
			 -I$(vista) -I$(parser) -I$(vistas) -I$(animaciones) -I$(media) -I$(paneles) \
			 -I$(controlador) -I$(modelo)

# REGLAS
#########


.PHONY: all clean

all: $(target)

$(target): $(o_files)
	$(CXX) $(CFLAGS) $(shell sdl2-config --cflags) $(o_files) -L /usr/lib $(shell pkg-config --libs gtkmm-3.0) $(shell sdl2-config --libs) $(LDFLAGS) -lSDL2_mixer -o $(target) 

%.o: %.$(extension)
	$(CXX)  $(CXXFLAGS) $(CFLAGS) $(INCLUDES) -c $< -o $@  

clean:
	$(RM) $(o_files) $(o_files:.o=.deps) $(target)

